/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package tpgen;

import java.util.Collection;
import java.util.HashSet;
import tpgen.manchester.w3org.Construct;
import tpgen.manchester.w3org.ForbiddenConstructs;
import tpgen.patterns.TransformationPattern;

/**
 *
 * @author shanki
 */
public class Generator extends GenericGenerator {
    
    @Override
    public TransformationPattern generate(int maxVarsPerType, int maxAxioms, int maxTransformations, Collection<Construct> inputForbiddenConstructs, Collection<Construct> outputForbiddenConstructs) {

        inputForbiddenConstructs    = new HashSet<Construct>(inputForbiddenConstructs);
        outputForbiddenConstructs   = new HashSet<Construct>(outputForbiddenConstructs);
        
        //characteristics
        
        inputForbiddenConstructs.add(Construct.objectPropertyCharacteristicsAsymmetric);
        inputForbiddenConstructs.add(Construct.objectPropertyCharacteristicsFunctional);
        inputForbiddenConstructs.add(Construct.objectPropertyCharacteristicsInverseFunctional);
        inputForbiddenConstructs.add(Construct.objectPropertyCharacteristicsIrreflexive);
        inputForbiddenConstructs.add(Construct.objectPropertyCharacteristicsReflexive);
        inputForbiddenConstructs.add(Construct.objectPropertyCharacteristicsSymmetric);
        inputForbiddenConstructs.add(Construct.objectPropertyCharacteristicsTransitive);
        inputForbiddenConstructs.add(Construct.dataPropertyFrameCharacteristics);

        outputForbiddenConstructs.add(Construct.objectPropertyCharacteristicsAsymmetric);
        outputForbiddenConstructs.add(Construct.objectPropertyCharacteristicsFunctional);
        outputForbiddenConstructs.add(Construct.objectPropertyCharacteristicsInverseFunctional);
        outputForbiddenConstructs.add(Construct.objectPropertyCharacteristicsIrreflexive);
        outputForbiddenConstructs.add(Construct.objectPropertyCharacteristicsReflexive);
        outputForbiddenConstructs.add(Construct.objectPropertyCharacteristicsSymmetric);
        outputForbiddenConstructs.add(Construct.objectPropertyCharacteristicsTransitive);
        outputForbiddenConstructs.add(Construct.dataPropertyFrameCharacteristics);        

        // individual frame axioms make no sence in OP2
        
        outputForbiddenConstructs.add(Construct.individualFrame);
        
        // constrtucts that cannot be used to replace a given construct
                
        outputForbiddenConstructs   = ForbiddenConstructs.expand(outputForbiddenConstructs);
        
        // lists
        
        inputForbiddenConstructs.add(Construct.listNext);
        outputForbiddenConstructs.add(Construct.listNext);
        
        return super.generate(maxVarsPerType, maxAxioms, maxTransformations, inputForbiddenConstructs, outputForbiddenConstructs);
    }
    
}
